var appNameQueryStr = "";
var urlQueryStr = "";

var appRegisterPanel = function() {
	return {

		getAppRegisterPanel : function() {

			var appRegisterStore = Ext.create('Ext.data.Store', {
				pageSize : globalPageSize,
				autoLoad : true,
				model : 'appRegisterModel',
				proxy : {
					type : 'ajax',
					url : 'appRegisterServlet?action=getAppRegisterListByCon',
					reader : {
						type : 'json',
						root : 'rows',
						totalProperty : 'total'
					}
				}
			});

			appRegisterStore.on('beforeload', function(store, options) {

				var para = {};
				para.appName = appNameQueryStr;
				para.url = urlQueryStr;

				var paraStr = Ext.encode(para);

				var new_para = {
					condition : paraStr
				};
				Ext.apply(store.proxy.extraParams, new_para);
			});

			var pb = Ext.create("Ext.toolbar.Paging", {
				pageSize : globalPageSize,
				store : appRegisterStore,
				displayInfo : true,
				displayMsg : '共{2}条 当前显示第{0} - {1}条记录',
				emptyMsg : '没有数据'

			});

			var selModel = Ext.create('Ext.selection.CheckboxModel');

			var appRegisterpanel = Ext.create("Ext.grid.Panel", {
				selModel : selModel,
				title : '>>当前位置：应用注册',
				// iconCls:'menu-list',
				region : 'center',
				store : appRegisterStore,
				id : 'appRegisterListPanel',
				tbar : this.getToolBar(),
				columns : [
				// {header:'序号', dataIndex:'tapeCode', sortable:false},
				{
					header : '系统编码',
					dataIndex : 'appCode',
					flex : 1,
					width : 100
				}, {
					header : '系统名称',
					dataIndex : 'appName',
					flex : 1,
					width : 150
				}, {
					header : '版本',
					dataIndex : 'ver'
				}, {
					header : 'URL',
					dataIndex : 'url',
					width : 200
				},
				// {header:'所属机构', dataIndex:'repairDate', sortable:false},
				{
					header : '承建商',
					dataIndex : 'vendorName'
				}, {
					header : '维护商',
					dataIndex : 'srvName'
				}, {
					header : '状态',
					dataIndex : 'entityStatus',
					renderer : getStatusStr
				}
				// {header:'运行状态', dataIndex:'repairContent',
				// renderer:ellipsisStr},
				// {header:'使用状态', dataIndex:'repairContent',
				// renderer:ellipsisStr},
				// {header:'状态', dataIndex:'repairContent',
				// renderer:ellipsisStr}
				],
				bbar : pb
			// forceFit: true
			});

			// 双击打开编辑窗口
			appRegisterpanel.on('itemdblclick', function(obj, record) {
				appRegisterPanel.getEditAppRegisterPanel(appRegisterStore, record).show();
			});

			return appRegisterpanel;
		},

		getToolBar : function() {

			var tb = Ext.create("Ext.toolbar.Toolbar", {
				items : [ {
					xtype : 'button',
					icon : 'images/icons/add.png',
					text : '新增',
					handler : function() {
						var appRegisterStore = Ext.getCmp('appRegisterListPanel').getStore();
						appRegisterPanel.getAddAppRegisterPanel(appRegisterStore).show();
					}
				}, {
					xtype : 'button',
					icon : 'images/icons/application_edit.png',
					text : '编辑',
					handler : function() {
						var appRegisterStore = Ext.getCmp('appRegisterListPanel').getStore();
						var sm = Ext.getCmp('appRegisterListPanel').getSelectionModel();
						var count = sm.getCount();

						if (count != 1) {
							Ext.Msg.show({
								title : '提示',
								msg : '请选择1个应用!',
								buttons : Ext.Msg.YES,
								icon : Ext.Msg.WARNING
							});

							return false;
						}

						var selectRecord = sm.getSelection();

						appRegisterPanel.getEditAppRegisterPanel(appRegisterStore, selectRecord[0]).show();
					}
				}, {
					xtype : 'button',
					icon : 'images/icons/delete.png',
					text : '删除',
					handler : function() {

						var sm = Ext.getCmp('appRegisterListPanel').getSelectionModel();
						var count = sm.getCount();

						if (count == 0) {
							Ext.Msg.show({
								title : '提示',
								msg : '请选择要删除的条目!',
								buttons : Ext.Msg.OK,
								icon : Ext.Msg.WARNING
							});

							return;
						}

						Ext.Msg.show({
							title : '提示',
							msg : '确认删除所选?',
							buttons : Ext.Msg.YESNO,
							fn : function(btn, text) {
								if (btn == 'yes') {

									var records = sm.getSelection();

									var idArr = [];
									for ( var i = 0; i < count; i++) {
										idArr.push(records[i].data.appId);
									}

									var deleData = {};
									deleData.idArr = idArr;

									var f = function(data) {
										var suc = data.suc;
										if (suc) {
											Ext.Msg.show({
												title : '提示',
												msg : '删除成功!',
												buttons : Ext.Msg.OK,
												icon : Ext.Msg.INFO
											});
											Ext.getCmp('appRegisterListPanel').getStore().loadPage(1);
										} else {
											Ext.Msg.show({
												title : '提示',
												msg : '删除失败!',
												buttons : Ext.Msg.OK,
												icon : Ext.Msg.INFO
											});
										}
									};

									ajax.call({
										servlet : 'appRegisterServlet?action=delete',
										callPara : deleData,
										callBackMethod : f
									});

								} else {
									return false;
								}
							}
						});

					}
				}, {
					xtype : 'button',
					icon : 'images/icons/control_play_blue.png',
					text : '启用',
					handler : function() {
						appRegisterPanel.activeOrUnActive('active');
					}
				}, {
					xtype : 'button',
					icon : 'images/icons/control_stop_blue.png',
					text : '停用',
					handler : function() {
						appRegisterPanel.activeOrUnActive('unactive');
					}
				}, '->', {
					xtype : 'label',
					text : '系统名称:'
				}, {
					xtype : 'textfield',
					id : 'appNameCom'
				}, {
					xtype : 'label',
					text : 'URL:'
				}, {
					xtype : 'textfield',
					id : 'urlCom'
				},
				// {
				// xtype: 'label',
				// text: '所属机构:'
				// },
				// {
				// xtype: 'textfield',
				// id : 'repairMan'
				// },
				'-', {
					xtype : 'button',
					text : '查询',
					icon : 'images/icons/search.gif',
					iconCls : 'x-btn-icon',
					handler : function() {

						appNameQueryStr = Ext.getCmp("appNameCom").getValue();
						urlQueryStr = Ext.getCmp("urlCom").getValue();

						var appRegisterStore = Ext.getCmp('appRegisterListPanel').getStore();
						appRegisterStore.loadPage(1);
					}
				}, {
					xtype : 'button',
					icon : 'images/icons/arrow_undo.png',
					text : '重置',
					handler : function() {
						appNameQueryStr = "";
						urlQueryStr = "";
						Ext.getCmp('appNameCom').reset();
						Ext.getCmp('urlCom').reset();
					}
				}

				]
			});

			return tb;
		},

		getEditAppRegisterPanel : function(appRegisterStore, selectRecord) {

			var store = Ext.create('Ext.data.Store', {
				// destroy the store if the grid is destroyed
				// autoDestroy: true,
				autoLoad : true,
				model : 'propertyModel',
				proxy : {
					type : 'ajax',
					url : 'appRegisterServlet?action=getAppRegisterextFieldinfo&id=' + selectRecord.data.appId,
					reader : {
						type : 'json',
						root : 'rows',
						totalProperty : 'total'
					}
				}
			});

			var rowEditing = Ext.create('Ext.grid.plugin.RowEditing', {
				clicksToMoveEditor : 1,
				autoCancel : false
			});

			var grid = Ext.create('Ext.grid.Panel', {
				store : store,
				stateful : true,
				id : 'propertiesGrid',
				stateId : 'stateGrid',
				columns : [ {
					text : '属性',
					width : 100,
					flex : 1,
					sortable : false,
					dataIndex : 'propertyName',
					editor : {
						allowBlank : false
					}
				}, {
					text : '值',
					width : 200,
					sortable : true,
					dataIndex : 'propertyValue',
					editor : {
						allowBlank : true
					}
				} ],
				height : 200,
				autoScroll : true,
				tbar : [ {
					icon : 'images/icons/add.png',
					text : '新增',
					handler : function() {
						rowEditing.cancelEdit();
						var r = Ext.create('propertyModel', {
							propertyName : '',
							propertyValue : ''
						});
						store.insert(0, r);
						rowEditing.startEdit(0, 0);
					}
				}, {
					itemId : 'removeProperty',
					icon : 'images/icons/application_delete.png',
					text : '删除',
					handler : function() {
						var sm = grid.getSelectionModel();
						rowEditing.cancelEdit();
						store.remove(sm.getSelection());
						if (store.getCount() > 0) {
							sm.select(0);
						}
					},
					disabled : true
				} ],
				plugins : [ rowEditing ],
				listeners : {
					'selectionchange' : function(view, records) {
						grid.down('#removeProperty').setDisabled(!records.length);
					}
				},
				viewConfig : {
					stripeRows : true
				}
			});

			var tabs = Ext.create('Ext.form.Panel', {
				border : false,
				autoHeight : true,
				bodyBorder : false,
				fieldDefaults : {
					labelWidth : 100,
					msgTarget : 'side'
				},
				defaults : {
					anchor : '100%'
				},
				items : {
					xtype : 'tabpanel',
					activeTab : 0,
					defaults : {
						bodyStyle : 'padding:10px'
					},
					items : [ {
						title : '系统信息',
						defaultType : 'textfield',
						frame : true,
						items : [ {
							xtype : 'fieldset',
							title : '基本信息',
							collapsible : true,
							defaultType : 'textfield',
							layout : 'anchor',
							defaults : {
								anchor : '100%'
							},
							items : [ {
								xtype : 'hidden',
								name : 'appId',
								value : selectRecord.data.appId
							}, {
								fieldLabel : '系统编码',
								allowBlank : false,
								name : 'appCode',
								value : selectRecord.data.appCode
							}, {
								fieldLabel : '名称',
								allowBlank : false,
								name : 'appName',
								value : selectRecord.data.appName
							}, {
								fieldLabel : '版本',
								name : 'ver',
								value : selectRecord.data.ver
							}, {
								fieldLabel : 'URL',
								allowBlank : false,
								name : 'url',
								value : selectRecord.data.url
							}, {
								fieldLabel : 'IP地址',
								name : 'serverIp',
								value : selectRecord.data.serverIp
							}, {
								xtype : 'numberfield',
								allowDecimals : false,
								fieldLabel : '端口',
								name : 'serverPort',
								value : selectRecord.data.serverPort
							},
							// ,{
							// fieldLabel: '所属机构',
							// allowBlank:false,
							// name: 'organization'
							// }
							{
								xtype : 'textarea',
								fieldLabel : '备注',
								name : 'remark',
								value : selectRecord.data.remark
							} ]
						} ]
					}, {
						title : '登录信息',
						frame : true,
						items : [ {
							xtype : 'fieldset',
							title : '登录表单信息',
							collapsible : true,
							frame : true,
							defaultType : 'textfield',
							layout : 'anchor',
							defaults : {
								anchor : '100%'
							},
							items : [ {
								fieldLabel : '帐号字段名',
								name : 'userFieldname',
								value : selectRecord.data.userFieldname
							}, {
								fieldLabel : '密码字段名',
								name : 'pwdFieldname',
								value : selectRecord.data.pwdFieldname
							}, {
								fieldLabel : '提交URL',
								name : 'submitUrl',
								value : selectRecord.data.submitUrl
							}, {
								xtype : 'combo',
								name : 'ssoType',
								fieldLabel : '单点登录方式',
								store : ssoTypeStore,
								editable : false,
								queryMode : 'local',
								displayField : 'name',
								valueField : 'value'
							}, {
								xtype : 'combo',
								name : 'target',
								fieldLabel : '打开方式',
								editable : false,
								store : targetStore,
								queryMode : 'local',
								displayField : 'name',
								valueField : 'value'
							}, {
								xtype : 'label',
								text : '其它属性:'
							}, grid ]
						} ]
					}, {
						title : '承建商信息',
						defaultType : 'textfield',
						frame : true,
						items : [ {
							xtype : 'fieldset',
							title : '承建商',
							collapsible : true,
							frame : true,
							defaultType : 'textfield',
							layout : 'anchor',
							defaults : {
								anchor : '100%'
							},
							items : [ {
								fieldLabel : '承建商',
								name : 'vendorName',
								value : selectRecord.data.vendorName
							}, {
								fieldLabel : '公司地址',
								name : 'vendorAddress',
								value : selectRecord.data.vendorAddress
							}, {
								fieldLabel : '联系人',
								name : 'linkman',
								value : selectRecord.data.linkman
							}, {
								fieldLabel : '联系电话',
								name : 'vendorTel',
								value : selectRecord.data.vendorTel
							} ]
						}, {
							xtype : 'fieldset',
							title : '维护商',
							collapsible : true,
							frame : true,
							defaultType : 'textfield',
							layout : 'anchor',
							defaults : {
								anchor : '100%'
							},
							items : [ {
								fieldLabel : '维护商',
								name : 'srvName',
								value : selectRecord.data.srvName
							}, {
								fieldLabel : '公司地址',
								name : 'srvAddress',
								value : selectRecord.data.srvAddress
							}, {
								fieldLabel : '联系人',
								name : 'srvLinkman',
								value : selectRecord.data.srvLinkman
							}, {
								fieldLabel : '联系电话',
								name : 'srvTel',
								value : selectRecord.data.srvTel
							} ]
						} ]
					} ]
				},
				buttons : [ {
					text : '保存',
					handler : function() {
						if (tabs.getForm().isValid()) {
							var addData = {};
							addData.formContent = tabs.getForm().getValues();
							var objs = new Array();
							store.each(function(item) {
								var propertyItem = {};
								propertyItem.propertyName = item.get("propertyName");
								propertyItem.propertyValue = item.get("propertyValue");
								objs.push(propertyItem);
							});

							addData.propertyArr = objs;

							var f = function(data) {
								if (data.suc) {
									appRegisterStore.loadPage(1);
									Ext.Msg.alert('提示', '编辑应用成功!');
									// 关闭窗口
									editAppRegisterWin.close();
								} else {
									Ext.Msg.alert('提示', '编辑应用失败!');
								}
							};

							ajax.call({
								servlet : 'appRegisterServlet?action=edit',
								callPara : addData,
								callBackMethod : f
							});
						} else {
							Ext.Msg.show({
								title : '提示',
								msg : '请正确填写相关信息后保存!',
								buttons : Ext.Msg.YES,
								icon : Ext.Msg.WARNING
							});
							return false;
						}

					}
				}, {
					text : '取消',
					handler : function() {
						editAppRegisterWin.close();
					}
				} ]
			});

			var editAppRegisterWin = Ext.create("Ext.window.Window", {
				title : '应用注册->编辑',
				width : 800,
				modal : true,
				layout : 'fit',
				items : [ tabs ]
			});

			editAppRegisterWin.on('show', function() {

				if (selectRecord.data.ssoType == '1') {
					tabs.getForm().setValues({
						ssoType : '1'
					});
				} else if (selectRecord.data.ssoType == '2') {
					tabs.getForm().setValues({
						ssoType : '2'
					});
				} else if (selectRecord.data.ssoType == '3') {
					tabs.getForm().setValues({
						ssoType : '3'
					});
				}

				if (selectRecord.data.target == '1') {
					tabs.getForm().setValues({
						target : '1'
					});
				} else if (selectRecord.data.target == '2') {
					tabs.getForm().setValues({
						target : '2'
					});
				}

			});

			return editAppRegisterWin;
		},

		getAddAppRegisterPanel : function(appRegisterStore) {
			// create the Data Store
			var store = Ext.create('Ext.data.Store', {
				// destroy the store if the grid is destroyed
				autoDestroy : true,
				model : 'propertyModel',
				proxy : {
					type : 'memory'
				},
				// data: data,
				sorters : [ {
					property : 'start',
					direction : 'ASC'
				} ]
			});

			var rowEditing = Ext.create('Ext.grid.plugin.RowEditing', {
				clicksToMoveEditor : 1,
				autoCancel : false
			});

			var grid = Ext.create('Ext.grid.Panel', {
				store : store,
				stateful : true,
				id : 'propertiesGrid',
				stateId : 'stateGrid',
				columns : [ {
					text : '属性',
					width : 100,
					flex : 1,
					sortable : true,
					dataIndex : 'propertyName',
					editor : {
						allowBlank : false
					}
				}, {
					text : '值',
					width : 200,
					sortable : false,
					dataIndex : 'propertyValue',
					editor : {
						allowBlank : true
					}
				} ],
				height : 150,
				autoScroll : true,
				tbar : [ {
					icon : 'images/icons/add.png',
					text : '新增',
					handler : function() {
						rowEditing.cancelEdit();
						var r = Ext.create('propertyModel', {
							propertyName : '',
							propertyValue : ''
						});
						store.insert(0, r);
						rowEditing.startEdit(0, 0);
					}
				}, {
					itemId : 'removeProperty',
					icon : 'images/icons/application_delete.png',
					text : '删除',
					handler : function() {
						var sm = grid.getSelectionModel();
						rowEditing.cancelEdit();
						store.remove(sm.getSelection());
						if (store.getCount() > 0) {
							sm.select(0);
						}
					},
					disabled : true
				} ],
				plugins : [ rowEditing ],
				listeners : {
					'selectionchange' : function(view, records) {
						grid.down('#removeProperty').setDisabled(!records.length);
					}
				},
				viewConfig : {
					stripeRows : true
				}
			});

			var tabs = Ext.create('Ext.form.Panel', {
				border : false,
				autoHeight : true,
				bodyBorder : false,
				fieldDefaults : {
					labelWidth : 100,
					msgTarget : 'side'
				},
				defaults : {
					anchor : '100%'
				},
				items : {
					xtype : 'tabpanel',
					activeTab : 0,
					defaults : {
						bodyStyle : 'padding:10px'
					},
					items : [ {
						title : '系统信息',
						defaultType : 'textfield',
						frame : true,
						items : [ {
							xtype : 'fieldset',
							title : '基本信息',
							collapsible : true,
							defaultType : 'textfield',
							layout : 'anchor',
							defaults : {
								anchor : '100%'
							},
							items : [ {
								fieldLabel : '系统编码',
								allowBlank : false,
								name : 'appCode'
							}, {
								fieldLabel : '名称',
								allowBlank : false,
								name : 'appName'
							}, {
								fieldLabel : '版本',
								name : 'ver'
							}, {
								fieldLabel : 'URL',
								name : 'url'
							}, {
								fieldLabel : 'IP地址',
								name : 'serverIp'
							}, {
								xtype : 'numberfield',
								allowDecimals : false,
								fieldLabel : '端口',
								name : 'serverPort'
							},
							// ,{
							// fieldLabel: '所属机构',
							// allowBlank:false,
							// name: 'organization'
							// }
							{
								xtype : 'textarea',
								fieldLabel : '备注',
								name : 'remark'
							} ]
						} ]
					}, {
						title : '登录信息',
						defaultType : 'textfield',
						frame : true,
						items : [ {
							xtype : 'fieldset',
							title : '登录表单信息',
							collapsible : true,
							frame : true,
							defaultType : 'textfield',
							layout : 'anchor',
							defaults : {
								anchor : '100%'
							},
							items : [ {
								fieldLabel : '帐号字段名',
								name : 'userFieldname'
							}, {
								fieldLabel : '密码字段名',
								name : 'pwdFieldname'
							}, {
								fieldLabel : '提交URL',
								name : 'submitUrl'
							}, {
								fieldLabel : '验证URL',
								name : 'validateUrl'
							}, {
								xtype : 'combo',
								name : 'ssoType',
								fieldLabel : '单点登录方式',
								store : ssoTypeStore,
								editable : false,
								queryMode : 'local',
								displayField : 'name',
								valueField : 'value'
							}, {
								xtype : 'combo',
								name : 'target',
								fieldLabel : '打开方式',
								editable : false,
								store : targetStore,
								queryMode : 'local',
								displayField : 'name',
								valueField : 'value'
							}, {
								xtype : 'label',
								text : '其它属性:'
							}, grid ]
						} ]
					}, {
						title : '承建商信息',
						defaultType : 'textfield',
						frame : true,
						items : [ {
							xtype : 'fieldset',
							title : '承建商',
							collapsible : true,
							frame : true,
							defaultType : 'textfield',
							layout : 'anchor',
							defaults : {
								anchor : '100%',
								allowBlank : true
							},
							items : [ {
								fieldLabel : '承建商',
								name : 'vendorName'
							}, {
								fieldLabel : '公司地址',
								name : 'vendorAddress'
							}, {
								fieldLabel : '联系人',
								name : 'linkman'
							}, {
								fieldLabel : '联系电话',
								name : 'vendorTel'
							} ]
						}, {
							xtype : 'fieldset',
							title : '维护商',
							collapsible : true,
							frame : true,
							defaultType : 'textfield',
							layout : 'anchor',
							defaults : {
								anchor : '100%',
								allowBlank : true
							},
							items : [ {
								fieldLabel : '维护商',
								name : 'srvName'
							}, {
								fieldLabel : '公司地址',
								name : 'srvAddress'
							}, {
								fieldLabel : '联系人',
								name : 'srvLinkman'
							}, {
								fieldLabel : '联系电话',
								name : 'srvTel'
							} ]
						} ]
					} ]
				},
				buttons : [ {
					text : '保存',
					handler : function() {
						if (tabs.getForm().isValid()) {
							var addData = {};
							addData.formContent = tabs.getForm().getValues();
							var objs = new Array();
							store.each(function(item) {
								var propertyItem = {};
								propertyItem.propertyName = item.get("propertyName");
								propertyItem.propertyValue = item.get("propertyValue");
								objs.push(propertyItem);
							});

							addData.propertyArr = objs;

							var f = function(data) {
								if (data.suc) {
									appRegisterStore.loadPage(1);
									Ext.Msg.alert('提示', '新增应用成功!');
									// 关闭窗口
									addAppRegisterWin.close();
								} else {
									Ext.Msg.alert('提示', '新增应用失败!');
								}
							};

							ajax.call({
								servlet : 'appRegisterServlet?action=add',
								callPara : addData,
								callBackMethod : f
							});

						} else {
							Ext.Msg.show({
								title : '提示',
								msg : '请正确填写相关信息后保存!',
								buttons : Ext.Msg.YES,
								icon : Ext.Msg.WARNING
							});
							return false;
						}

					}
				}, {
					text : '取消',
					handler : function() {
						addAppRegisterWin.close();
					}
				} ]
			});

			var addAppRegisterWin = Ext.create("Ext.window.Window", {
				title : '应用注册->新增',
				width : 800,
				modal : true,
				layout : 'fit',
				items : [ tabs ]
			});

			return addAppRegisterWin;
		},
		// 启用、停用
		activeOrUnActive : function(action) {
			var sm = Ext.getCmp('appRegisterListPanel').getSelectionModel();
			var count = sm.getCount();

			if (count == 0) {
				Ext.Msg.show({
					title : '提示',
					msg : '请选择的条目!',
					buttons : Ext.Msg.OK,
					icon : Ext.Msg.WARNING
				});
				return;
			}

			var records = sm.getSelection();

			var idArr = [];

			for ( var i = 0; i < count; i++) {
				idArr.push(records[i].data.appId);
			}

			var operaData = {};
			operaData.idArr = idArr;

			var f = function(data) {
				var suc = data.suc;
				if (suc) {
					Ext.Msg.show({
						title : '提示',
						msg : '操作成功!',
						buttons : Ext.Msg.OK,
						icon : Ext.Msg.INFO
					});
					Ext.getCmp('appRegisterListPanel').getStore().loadPage(1);
				} else {
					Ext.Msg.show({
						title : '提示',
						msg : '操作失败!',
						buttons : Ext.Msg.OK,
						icon : Ext.Msg.INFO
					});
				}
			};

			ajax.call({
				servlet : 'appRegisterServlet?action=' + action,
				callPara : operaData,
				callBackMethod : f
			});
		}
	};
}();
